﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAL;

namespace BUL
{
   public class News_Business
    {
       readonly CTAT8_VNEntities _dal = new CTAT8_VNEntities();
       public void LoadSourceGroupNews(ComboBox comboBox)
       {
           // lấy danh sách nhóm tin để hiển thị trong ComboBox
           var result = _dal.GroupNews.Select(x => new {Id = x.Id, Name = x.Name}).OrderBy(x=>x.Name);
           // Thiết lập giá trị khi lựa chọn một phân từ trong combobox là trường Id
           comboBox.ValueMember = "Id";
           // Thiết lập giá trị Hiển thị trên comboBox
           comboBox.DisplayMember = "Name";
           // gán Suorce cho COmboBox
           comboBox.DataSource = result;
       }

       public void LoadAllNews(DataGridView dataGridView, string strTimKiem)
       {
           // Kiểm tra xem dataGridview có hàng nào hay không
           if (dataGridView.Rows.Count > 0)
               dataGridView.Rows.Clear(); // xóa nếu dataGridview có hàng tồn tại
           var j = 0;
           // lấy ra danh sách tin tức bao gồm cả nhóm tin.(GroupNews *------> 1  News), để hiển thị tên nhóm tin trong DataGridview.
           var result = _dal.News.Include("GroupNews").Where(x=>x.Name.Contains(strTimKiem)).OrderByDescending(x => x.Date).Select(x => new { GroupNewsId = x.GroupNewsId, GroupNewsName = x.GroupNew.Name, Id = x.Id, Name = x.Name, Content = x.Content, Detail = x.Detail }).ToList();
           // Lặp và thêm dữ liệu vào hàng.
           foreach (var item in result)
           {
               // thêm mới hàng vào dataGridview
               dataGridView.Rows.Add();
               // Giá trị Số Thứ Tự
               dataGridView[0, j].Value = j + 1;
               // giá trị Id (cột này ẩn không hiển thị)
               dataGridView[1, j].Value = item.Id;
               // giá trị GroupNewsId (cột này ẩn không hiển thị)
               dataGridView[2, j].Value = item.GroupNewsId;
               // Hiển thị tên nhóm tin
               dataGridView[3, j].Value = item.GroupNewsName;
               // hêển thị tên tin.
               dataGridView[4, j].Value = item.Name;
               // hiển thị phần miêu tả tin
               dataGridView[5, j].Value = item.Content;
               // hiển thị chi tiết tin
               dataGridView[6, j].Value = item.Detail;

               j++;
           }
       }
     
       public void Insert_News(int groupNewsId ,string name, string content, string detail)
       {
           // Validate data
           // tạo mới đối tượng News.
           var addItem = new News
                             {
                                 GroupNewsId = groupNewsId,
                                 Name = name,
                                 Content = content,
                                 Detail = detail,
                                 Date = DateTime.Now
             
                            };
           // Thêm đối tượng News vừa tạo vào List News
           _dal.News.AddObject(addItem);
           // Lưu giá trị xuống CSDL
           _dal.SaveChanges();

       }

       public void Update_News(int id, int groupNewsId, string name, string content, string detail)
       {
           // Lấy ra đối tượng cần câp nhật
           var updateItem = _dal.News.Where(x => x.Id == id).FirstOrDefault();
           // kiểm tra xem đối tượng này có tồn tại hay không??
           // nếu đối tượng bằng null => không tồn tại ==> thoát khỏi hàm này.
           if(updateItem==null)
               return;
           // cập nhật các thông tin cho đối tượng
           updateItem.GroupNewsId = groupNewsId;
           updateItem.Name = name;
           updateItem.Content = content;
           updateItem.Detail = detail;
           // lưu giá trị cập nhật xuống CSDL
           _dal.SaveChanges();
       }

       public void Delete_News(int id)
       {
           // Lấy ra đối tượng cần câp nhật
           var deleteItem = _dal.News.Where(x => x.Id == id).FirstOrDefault();
           // kiểm tra xem đối tượng này có tồn tại hay không??
           // nếu đối tượng bằng null => không tồn tại ==> thoát khỏi hàm này.
           if (deleteItem == null)
               return;
           //Xóa đối tượng khỏi List News.
           _dal.News.DeleteObject(deleteItem);
           //Lưu dữ liệu xuống CSDL
           _dal.SaveChanges();
       }
    }
}
